"""
文件读取，封装文件读取抽象类
"""
import json

from data_define import Record  # 引入记录销售金额的封装类


# 定义抽象类 文件读取 父类
class FailReader:
    # 定义抽象方法 读取文件数据 作为列表返回，列表中存储的是Record类对象
    def read_date(self) -> list[Record]:  # 声明返回的数据类型
        pass  # 抽象方法


# 定义子类 读取text文件数据
class TextFileReader(FailReader):

    def __init__(self, path):
        self.path = path  # 文件路径

    def read_date(self) -> list[Record]:
        f = open(self.path, 'r', encoding='UTF-8')
        record_list: list[Record] = []    # 定义一个空数组
        for line in f.readlines():    # 逐行读取文件内容
            line = line.strip()    # 将换行符去除 未传值时默认去除前后的空格/换行符
            line_list = line.split(',')    # 将字符串进行分割，得到新列表
            # print(line_list)
            record = Record(line_list[0],line_list[1],int(line_list[2]),line_list[3])   # 将分割后的列表数据依次传入Record对象中
            # print(record)
            record_list.append(record)    # 在列表尾部追加整个元素
            # print(record_list)
        f.close()   # 关闭文件
        return record_list

# 读取json文件数据
class JsonFileReader(FailReader):
    def __init__(self, path):
        self.path = path  # 文件路径

    def read_date(self) -> list[Record]:
        f = open(self.path, 'r', encoding='UTF-8')
        record_list: list[Record] = list()    # 定义一个空数组
        for line in f.readlines():    # 逐行读取文件内容
            data_dict = json.loads(line)    # 将json格式转化成字典
            record = Record(data_dict["date"],data_dict["order_id"],data_dict["money"],data_dict["city"])
            record_list.append(record)    #在列表末尾追加整个元素

        f.close()   # 关闭文件
        # print(record_list)
        return record_list

if __name__ == '__main__':
    t_read = TextFileReader("text_data.txt")
    list1 = t_read.read_date()
    print(list1)

    j_read = JsonFileReader("json_data.txt")
    list2 = j_read.read_date()
    # print(list1)

    # record = Record("2022-05-20","123456","5646","深圳")
    # print(record)